Appendix B: ittyMIDI Player Technical Information

  1. Files

    1. File Types
      • ittyMIDI Player plays only type 0 files. Type 1 files are converted to type 0 in SongLoader. Type 2 files are not supported. (The vast majority of MIDI files are type 1 or type 0).

    2. Database Format
      • MIDI files are stored as records in Palm SMF databases. ittyMIDI Player only opens databases with names of 10 characters or less, created by SongLoader. The files are stored in the standard SMF format for Palm, provided they are under 60k.

    3. Extended Memory
      • Player version 2.0 now supports extended memory. This allows SMF databases to be located on cards for extra storage space. Devices with this feature include: Sony Clies (Memory Stick), Most newer Palms (SD cards) and Handera (SD and CF). (Handspring memory modules are also supported, but this section does not apply to them, as they operate as traditional memory).

        A few considerations need to be made when using extended memory:

        1. Player only reads databases from the default directory for PDB's on the extended memory card (For example, /Palm/Launcher on Palm devices). This will not present a problem if you use the Palm desktop to install databases, but if you use another installation method, such as the Memory Stick slot on a Sony laptop, you must make sure it is in the correct directory. To find out the correct directory, use the file utility on the handheld to copy any program to the expansion card. The directory it is placed in should be the default directory for PDB's.
        2. Because ittyMIDI Player must load a song into main memory before playing it, you will not be able to play songs that are larger than the amount of free memory you have on the handheld. For example, if your largest song is 200k, you need slightly more than 200k free to play that song.
        3. Finally, there may be noticeable load times at startup when using extended memory. When starting the application for the first time after loading a new book or editing playlists, you may have to wait for several seconds. Subsequent startup times will be much faster.

    4. Large File Handling
      • The Palm database format only supports files of up to 64k. When a file is 60k or larger, it is split into 60k chunks.
        1. The first chunk is stored in the SMF database. It is playable as a standalone file, although the track length will be incorrect.
        2. Additional chunks are stored in proprietary databases. The naming scheme for these databases is: the name of the SMF database padded to 10 characters with spaces, with the word "data" appended. Underscores may be used instead of spaces on extended memory, depending on the card type and how the database was loaded.
        3. Each chunk begins with a sequencer specific meta event (Event number 01). See section VI for details of MicroTools, Inc. events.
        4. Each chunk ends with the hexadecimal bytes FF 2F 00, the MIDI end-of-file message, even though it may not be the true end of the file. This is to make the first chunk be playable by other programs that do not know this message format.
        5. SysEx messages are limited to 60K in size.
  2. Timing

    1. Accuracy
      • ittyMIDI Player is accurate to within 10ms, the timing resolution available on Palm OS.
        1. Timing errors are not cumulative. The time will always be within 10ms.
        2. The default MIDI timing resolution is 96 PPQ--about 5ms for a song at a tempo of 120.
        3. ittyMIDI Player normally operates at 10ms resolution, meaning that every 10 milliseconds, all outstanding messages are sent. However, when no song is playing, ittyMIDI Player reduces this rate to 30ms. This was done to preserve the battery in the handheld. This only effects thru data
  3. Rate

    1. Data Send Rate
      • Player can handle as much data as MIDI allows.

  4. All Notes Off

    1. During Play
      • When stopped during play, Player individually turns off each note that was on.

    2. Otherwise
      • When stop is pressed and no song is playing, Player sends an All Notes Off message on each channel.

  5. Automation

    1. Automation Support
      • Player does not support sequencer automation features at this time.

  6. MicroTools, Inc. proprietary events.

    1. Meta Events
      • Each sequencer specific meta-event starts with the following bytes. All values are in hexadecimal.
        FF 7F     This is the code for a sequencer specific 
                  event.
        
        xx        This is the length of the remainder of the 
                  message, in bytes. ( This may be more than
                  one byte. See the MIDI Spec.)
        
        00 01 3E  This is the manufacturer ID for MicroTools,
                  Inc.
        
    2. MicroTools, Inc. Meta Events
    3. The next byte tells which MicroTools message it is.
      1. Big File Message
        • Type byte: 01. A message telling the location of file chunks for files > 60k.
          xx xx xx   The rest of the message is made up
                     of 3-byte values. The first is the
                     unique record ID of the first
                     chunk, in "Midi Song Files". Each
                     subsequent value is the unique
                     record ID AND record name of a 
                     chunk in "Midi Song Data".
          
      2. Break Message
        • Type Byte: 02. This is a break message. When a song with this message is encountered, Player advances to the next song and stops, no matter what the play mode is set to. This only appears in a MIDI file with no other data. There are no other bytes in this message.
      3. Chain Message
        • Type byte: 03. This is a chain message. It is the same as a break message in every aspect, except play continues rather than stops, once again regardless of the play mode. This is not currently supported but is reserved for future use.

  7. Miscellaneous Information

    1. Time Signature
      • If a time signature message is encountered in the MIDI file, the measure will immediately advance and the beat will be reset to 1.

    2. Reset Controllers
      • We reset all controllers at the beginning of every song. This restores the controllers to a known value so that one song will not affect how the next song sounds.

    3. Volume Slider
      • The Volume Slider on the play screen proportionally adjusts the volume on each channel. It does not use the master volume controller. Many synthesizers do not implement master volume support.

 

PREVIOUS PAGE

TABLE OF CONTENTS